私がプログラミングを好きなのは、探求心と創造性を満たしてくれるからです。
RPG の試作品3です。
タイトル画面を一度クリックしてから、何かキーを押します。
…いろいろできるんですが、これもボツなんです。
前の記事(先月11月24日)で書いた、actionz, resultz のしくみをきちんと「RPG プログラミング手順書」に書かなきゃなりません。
そのためにはもう一度最初から作り直さなければならないんです。
たいへんだな!手順書。
ChatGPT の入力欄に「検索する」ボタンが用意されました。
「web6047」と入力すると…
適切なコメントをしていて、なんだか嬉しいなぁ…
このホームページの記事を月別に分別しました。
まる一日かかってしまった…
結局以前と同じようなレイアウトになりました。
各月のページへのリンクが一番上に並んでいて、何かの特集的なページ(Special Documents)があいだにあり、その後に日記が続きます。
「途中まで読んで、次のページ、別の月のページへと移動する」ことを考えたとき、キーボードの HOME ボタンを押してページトップへ移動すれば、そこに移動先へのリンクがある…という形にした方がめんどうが少ないと思います。そう考えるとどうしても同じレイアウトになってしまいます。
以前と違うのは、記事の並びが時系列にそって上から順に並んでいることと、私の管理作業が楽になったことです。
私の管理作業とは、毎月、月をまたぐときに、
これらの作業を今まで手作業で行っていましたが、これが今回の改修でワンタッチ(プログラムを1つ起動するだけ)になり楽になりました。
Musical Instrument Digital Interface、コンピューターと接続できる、MIDI の鍵盤を買いました。
Musical Instrument を和訳すると「楽器」となります。
(歌謡曲でよくあるカラオケ状態の「Instrumental」って「歌声がなくて静か、何か抜けてる」という意味だと思っていましたが、正しくは「楽器だけ」という意味だったんですね)
MIDI とは楽器のデジタルインターフェースということです。
ちなみに Musical を取って Instrument だけだと「器具、工具、器官」だそうです。
▼買ったのはコレ。
JavaScript で Web MIDI API というものがあり、鍵盤で音を押して、JavaScript で記録を取る、ということが出来そうです。
こういう MIDI の鍵盤を買うのは実は2回目です。
私は子供の頃に家族の食卓で、「将来、電子鍵盤を買う!」と宣言していたので、一応何か縁があるみたいです。
小学生のころからゲーム音楽を特別に選んで聴いていたので、その関連、影響かなと思います。
当時から「ゲームプログラミングには BGM が必要」と強く想っていて、MSX2 +FMPAC(Panasonic Amusement Cartridge)用の「シンセサウルス」というソフトウェア、PC-9801 用の「サウンドオーケストラ+リトルミュージシャン」というソフトウェアなどを購入した思い出もあります。
▼MSX シンセサウルス 音を鳴らしただけで何も作れませんでした。 |
▼PC-9801 リトルミュージシャン ドラクエ4の「おてんば姫」とか Snatcherの「ネオ・コウベ・シティ」の楽譜があったので入力しましたが、作曲は無理でした。 |
※掲載許可を取っていない代わりに黒帯を入れてあります
35歳くらいのときに初めて買った電子鍵盤(シンセサイザー)は姪っ子が少し気に入って使っていたので、「いいよ」とあげてしまいました。
あげたけど、やはり必要は必要なので結局今回また買うことになったわけです。
作曲できるできないはあまり問題ではなく(いや、問題でしょ…)、どちらかというと「必要」で買うわけです。
なぜ必要なのかというと、プログラム上でデータを入力して音を鳴らす方法だと、あいだにデータ入力とそのプログラムの実行とか演奏ボタンを押すとか入ります。MIDI 鍵盤であれば、鍵盤を押せば直接音が鳴るし、記録もできます。
その方がイメージを形にしやすいかなと思いました。
イメージを形にするというのは言うほど簡単ではありません。
絵だとペンを持って紙があれば日常で落書きがいつでもできるので、普通の人でも へたくそ だとしても何かしら描くことができます。
でも音となると、手いたずらで机の上をカッカッカ、タッタカ、タッ、とリズムを立てることができますが、ドレミファソラシドみたいな音はすぐそこに無いので、落書き(適当弾き)さえ日常的に経験できません。
ドレミファソラシドにはそれぞれ CDEFGAB、という符号があり、音によって周波数も決まっています。
複数の音を同時に鳴らす和音もコードとして組み合わせが決まっています。
そういう定式的な情報を頼りにして習得する方法と、、
また、RPG のゲームプレイヤーにムード(雰囲気)を与えるには、フィールド上では軽快な高い音、ダンジョンでは暗い低い音…を選ぶはずです。そういう実際的なアプローチで学べば、ある程度は何か作れるんじゃないか……、甘いかな。
ChatGPT に要点でも聞いてみるか…。
Wikipedia のシンセサウルスのページを見ていたら少し気づいた点があったので、初めてWikipedia のページを修正してみました。
対応機種が MSX2+ だけだったのを…
このように詳細に分けて書きました。
私はロムカセットでバージョン 1.0 を持っていましたが、バージョンアップの通知が来て、ロムカセットを郵送した覚えがあります。
人々が利用する情報なので、間違いのないように気を付けました…
購入した MIDI 鍵盤は昨日届きました。
MDN のサンプルをそのまま実行したら、あっさりと MIDI 鍵盤との通信ができてしまいました。
▼JavaScript の console 出力
▼JavaScript プログラム
<!DOCTYPE html>
<html>
<head>
<title>「MIDI テスト」スクリプト</title>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<meta name="viewport" content="
width=device-width,
minimum-scale=0.1,
initial-scale=1,
maximum-scale=3,
user-scalable=yes
">
<script>
function run() {
// 2つめのサンプル 「入力と出力を列挙する」 を呼び出し
listInputsAndOutputs( midi );
// 3つめのサンプル 「MIDI 入力を扱う」 を呼び出し
startLoggingMIDIInput( midi )
}
// 1つめのサンプル 「MIDI ポートにアクセスできるようにする」
let midi = null; // グローバルの MIDIAccess オブジェクト
function onMIDISuccess( midiAccess ) {
console.log( "MIDI の準備ができました!" );
midi = midiAccess; // グローバル変数に保存する
//(実際の使用法では、オブジェクトインスタンスに格納するのがよいでしょう)
}
function onMIDIFailure( msg ) {
console.error( `MIDI アクセスの取得に失敗しました - ${msg}` );
}
navigator.requestMIDIAccess().then( onMIDISuccess, onMIDIFailure );
// 2つめのサンプル 「入力と出力を列挙する」
function listInputsAndOutputs( midiAccess ) {
for( const entry of midiAccess.inputs ) {
const input = entry[ 1 ];
console.log(
`入力ポート [type:'${input.type}']` +
` id:'${input.id}'` +
` manufacturer:'${input.manufacturer}'` +
` name:'${input.name}'` +
` version:'${input.version}'`,
);
}
for( const entry of midiAccess.outputs ) {
const output = entry[ 1 ];
console.log(
`出力ポート [type:'${output.type}']` +
` id:'${output.id}'` +
` manufacturer:'${output.manufacturer}'` +
` name:'${output.name}'` +
` version:'${output.version}'`,
);
}
}
// 3つめのサンプル 「MIDI 入力を扱う」
function onMIDIMessage( event ) {
let str = `タイムスタンプ ${event.timeStamp} に受信した MIDI メッセージ [${event.data.length} バイト]: `;
for( const character of event.data ) {
str += `0x${character.toString(16)} `;
}
console.log( str );
}
function startLoggingMIDIInput( midiAccess, indexOfPort ) {
midiAccess.inputs.forEach( ( entry ) => {
entry.onmidimessage = onMIDIMessage;
} );
}
</script>
</head>
<body onload="run()">
</body>
</html>
あとは Web Audio API で音を出せばよい、ということです。
私は知恵袋の回答者を 2023年 1月18日 から始めて、現時点で 1,788 件回答しているけど(プログラミングカテゴリ3位のカテゴリーマスターの人は 17,411 件回答なので、比べると私は1/10にすぎません)、その中でも一番良いのではないかと思われる私の回答がこれです。
「質問者が理解できるように筋道立てて説明する回答」も良いのですが、誰かを応援するのが私にとって一番いい回答なんじゃないかなと思います。
年末年始で実家に帰る予定で、両親と妹が私の部屋から電車で1時間のところまで迎えに来てくれたけど、私が「のどがガラガラするんだよね」と言ったら、「インフルエンザじゃないか?」と母に言われ、その場で内科へ。
でも年末年始で休診でした。
別の内科へ電話すると、医者らしき おじいさんが電話に出てくれて、
「どこもやってないと思うよ。休日診療をやっているところへ行くしかないよ」
と教えてくれました。
しかし休日診療をやっているところへ電話しても、
「予約がいっぱいで、もう診られません」
と言われました。
実家へ行くのはあきらめて、とんぼ返りで部屋へ帰宅。
年末年始の食べ物を買いに行きたかったけど、まぁインフルエンザにかかっているなら、外出しないほうが良いだろうと思い、もう、とにかくアニメを観る、映画を観る、で時間をつぶすことに。
シリーズ映画を3作続けて観ました。
2018年アメリカ/ホラー/1:30/Rakuten.TVで400円/評価:公★★★★☆、私★★★☆☆(3.7)
地球外から降ってきた怪物と戦うSFホラー。
その怪物は目が見えないが音に非常に敏感で、音を立てるとその音の発信源(人間や動物)に襲いかかる。
面白かったけど、最初から最後までどこか大人しい作りで、微妙に退屈感がある。
2021年アメリカ/ホラー/1:37/Rakuten.TVで400円/評価:公★★★★☆、私★★★☆☆(3.8)
前作の直後から始まる話。
でも怪物が空から降ってきた最初の様子が冒頭で少し語られる。
それがパンデミック・ホラーみたいな感じで面白かった。
前作同様、最初から最後まで微妙に退屈。
2024年アメリカ/ホラー/1:40/Rakuten.TVで400円/評価:公★★★★☆、私★★★☆☆(3.6)
怪物が空から降ってきた最初の様子を、黒人女性と法律を学んでいる背広姿の男性の視点で描いている。
まぁ、面白かったけど、前作同様、最初から最後まで微妙に退屈。
…あまりお金を使うわけにはいかないから、次は無料アニメでも観るか…